
// 使用数组来模拟栈(Stack)
// 栈(Stack)的特点: 
// LIFO : Last In First Out (后进先出)

let stack = [] ;
console.log( 'stack: ', stack.toString() );

stack.push( '康熙' ); // Array.prototype.push
stack.push( '雍正' );
stack.push( '乾隆' );
console.log( 'stack: ', stack.toString() );

// 弹出栈顶元素: 获取并删除栈顶元素
let top = stack.pop(); // Array.prototype.pop
console.log( 'top: ' , top );
console.log( 'stack: ', stack.toString() );

top = stack.pop();
console.log( 'top: ' , top );
console.log( 'stack: ', stack.toString() );

// 在 Array对象的原型上原本没有 peek 函数
// 因此这里使用 Array.prototype 自定义了一个 peek 函数
Array.prototype.peek = function(){
    if( this.length === 0 ) {
        return this[ 0 ] ;
    } 
    return this[ this.length - 1 ];
}

// 调用我们在 Array对象的原型上 自定义的函数
top = stack.peek();
console.log( 'top: ' , top );
console.log( 'stack: ', stack.toString() );
